package com.jdy.haoduoaiteacher.view;//package com.jdy.haoduoaiteacher.view;
//
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Collections;
//import java.util.List;
//
//import android.content.Context;
//import android.content.res.TypedArray;
//import android.graphics.Bitmap;
//import android.graphics.Bitmap.Config;
//import android.graphics.Canvas;
//import android.graphics.Color;
//import android.graphics.LinearGradient;
//import android.graphics.Paint;
//import android.graphics.Path;
//import android.graphics.PointF;
//import android.graphics.PorterDuff.Mode;
//import android.graphics.PorterDuffXfermode;
//import android.graphics.Rect;
//import android.graphics.RectF;
//import android.graphics.Shader;
//import android.graphics.Shader.TileMode;
//import android.graphics.drawable.BitmapDrawable;
//import android.graphics.drawable.Drawable;
//import android.util.AttributeSet;
//import android.widget.ImageView;
//
//import com.jdy.haoduoaiteacher.R;
//import com.jdy.haoduoaiteacher.util.Tools;
//
//public class RoundedImageView extends ImageView {
//
//  public enum CornerMarkStyle {
//    None,
//
//    HORIZONTAL,
//
//    SLOPE,
//
//  }
//
//  public enum ShapeDirection {
//    None,
//
//    CONCAVE,
//
//    CONVEX,
//
//  }
//
//  private final CornerMarkStyle markStyle = CornerMarkStyle.HORIZONTAL;
//
//  private final ShapeDirection shapeDirection = ShapeDirection.CONCAVE;
//
//  private float ratio = 1;
//
//  private float mBaseHeight;
//
//  private final int SAMPLE_COUNT = 20;
//
//  private float RADIUS = 16;
//
//  private List<PointF> mBottomShadowPoints;
//
//  private Path mShadowPath;
//
//  private boolean mBottomShadowEnabled = true;
//
//  private boolean mEnableGradient = false;
//
//  private final boolean mCornerMarkEnabled = false;
//
//  private final static String HOT_CAPTION = "HOT";
//
//  private final static String NEW_CAPTION = "NEW";
//
//  private String customString;
//
//  private final static int STRING_COLOR = Color.WHITE;
//
//  private final static int MARK_RED_BACKGROUND = Color.RED;
//
//  private final static int MARK_THEME_BACKGROUND = Color.rgb(32, 207, 210);
//
//  /**
//   * horizontal part
//   */
//  private float markWidth;
//
//  private float markHeight;
//
//  private final float shadowWidth = 2;
//
//  private float concaveHeight;
//
//  private float convexHeight;
//
//  /**
//   * slope part
//   */
//
//  private float trapzoidBottomWidth;
//
//  private float trapzoidTopWidth;
//
//  private float trapzoidHeight;
//
//  private Bitmap mRoundBitmap;
//
//  public boolean isBottomShadowEnabled() {
//    return mBottomShadowEnabled;
//  }
//
//  public void setBottomShadowEnabled(boolean mBottomShadowEnabled) {
//    this.mBottomShadowEnabled = mBottomShadowEnabled;
//  }
//
//  /**
//   * 
//   * @param context
//   */
//
//  public RoundedImageView(Context context) {
//    this(context, null);
//    // TODO Auto-generated constructor stub
//  }
//
//  public RoundedImageView(Context context, AttributeSet attrs) {
//    this(context, attrs, 0);
//  }
//
//  public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
//    super(context, attrs, defStyle);
//    init(context, attrs);
//    this.ratio = Tools.getPixelRatio(context);
//  }
//
//  private void init(final Context context, final AttributeSet attrs) {
//    if (isInEditMode())
//      return;
//
//    final TypedArray typedArray = context.obtainStyledAttributes(attrs,
//        R.styleable.RoundedImageView);
//
//    mBottomShadowEnabled = typedArray.getBoolean(
//        R.styleable.RoundedImageView_bottom_shadowEnabled, true);
//
//    mEnableGradient = typedArray.getBoolean(
//        R.styleable.RoundedImageView_gradient_Enabled, false);
//
//    typedArray.recycle();
//  }
//
//  @Override
//  public void setImageBitmap(Bitmap bitmap) {
//    super.setImageBitmap(bitmap);
//    invalidate();
//  }
//
//  @Override
//  protected void onDraw(Canvas canvas) {
//
//    Drawable drawable = getDrawable();
//
//    if (drawable == null || getWidth() == 0 || getHeight() == 0) {
//      return;
//    }
//
//    Bitmap b = null;
//    if (drawable instanceof BitmapDrawable) {
//      b = ((BitmapDrawable) drawable).getBitmap();
//    }
//
//    if (b != null && mRoundBitmap == null) {
//      Bitmap bitmap = Bitmap.createScaledBitmap(b, getWidth(), getHeight(),
//          true);
//
//      if (bitmap != null) {
//        mRoundBitmap = getCroppedBitmap(bitmap, RADIUS);
//      }
//    }
//
//    if (mRoundBitmap != null) {
//      canvas.drawBitmap(mRoundBitmap, 0, 0, null);
//    }
//  }
//
//  /**
//   * Get point from the circle by a certain angle.
//   */
//  private PointF getPointByAngle(PointF Center, float radius, double rotateAngle) {
//    PointF p = new PointF();
//    p.x = Center.x + radius * (float) Math.cos(rotateAngle);
//    p.y = Center.y + radius * (float) Math.sin(rotateAngle);
//    return p;
//  }
//
//  /**
//   * Get an array of points by a given range of angle.
//   * 
//   * @param start
//   * @param end
//   * @param samples
//   * @return
//   */
//  private PointF[] getPointsByAngleRange(PointF Center, float radius,
//      double start, double end, int samples) {
//    double range = Math.abs(end - start);
//    boolean reverse = false;
//    if (end < start) {
//      reverse = true;
//      double tmp = start;
//      start = end;
//      end = tmp;
//    }
//    double step = range / samples;
//    List<PointF> points = new ArrayList<PointF>();
//    double c = start;
//    for (; c <= end; c += step) {
//      PointF n = getPointByAngle(Center, radius, c);
//      points.add(n);
//    }
//    if (reverse)
//      Collections.reverse(points);
//    return points.toArray(new PointF[points.size()]);
//  }
//
//  private void createBottomShadowPoints(int width, int height) {
//    RADIUS = 16;
//
//    RADIUS *= ratio;
//
//    mBaseHeight = 3 * RADIUS;
//
//    mBottomShadowPoints = new ArrayList<PointF>();
//
//    PointF leftMostUp = new PointF(0, height - RADIUS - mBaseHeight);
//
//    PointF leftMostDown = new PointF(0, height - RADIUS);
//
//    PointF rightMostUp = new PointF(width, height - RADIUS - mBaseHeight);
//
//    PointF rightMostDown = new PointF(width, height - RADIUS);
//
//    PointF leftCenter = new PointF(RADIUS, height - RADIUS);
//
//    PointF rightCenter = new PointF(width - RADIUS, height - RADIUS);
//
//    PointF[] leftQuadCirclePoints = getPointsByAngleRange(leftCenter, RADIUS,
//        Math.PI, Math.PI / 2, SAMPLE_COUNT);
//
//    PointF[] rightQuadCirclePoints = getPointsByAngleRange(rightCenter, RADIUS,
//        Math.PI / 2, 0, SAMPLE_COUNT);
//
//    mBottomShadowPoints.add(leftMostUp);
//
//    mBottomShadowPoints.add(leftMostDown);
//
//    mBottomShadowPoints.addAll(Arrays.asList(leftQuadCirclePoints));
//
//    mBottomShadowPoints.addAll(Arrays.asList(rightQuadCirclePoints));
//
//    mBottomShadowPoints.add(rightMostDown);
//
//    mBottomShadowPoints.add(rightMostUp);
//
//    mBottomShadowPoints.add(leftMostUp);
//
//    mShadowPath = new Path();
//
//    for (int i = 0; i < mBottomShadowPoints.size(); i++) {
//      if (i == 0) {
//        mShadowPath.moveTo(mBottomShadowPoints.get(i).x,
//            mBottomShadowPoints.get(i).y);
//      } else {
//        mShadowPath.lineTo(mBottomShadowPoints.get(i).x,
//            mBottomShadowPoints.get(i).y);
//      }
//    }
//
//    mShadowPath.close();
//
//  }
//
//  public Bitmap getCroppedBitmap(Bitmap bmp, float pixels) {
//    Bitmap sbmp;
//
//    Bitmap output = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),
//        Config.ARGB_8888);
//    Canvas canvas = new Canvas(output);
//    final Paint paint = new Paint();
//    final Rect rect = new Rect(0, 0, bmp.getWidth(), bmp.getHeight());
//    final RectF rectF = new RectF(rect);
//    final float roundPx = pixels * ratio;
//    paint.setAntiAlias(true);
//
//    // paint.setFilterBitmap(true);
//    // paint.setDither(true);
//    canvas.drawARGB(0, 0, 0, 0);
//    paint.setColor(Color.parseColor("#BAB399"));
//    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
//    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
//    canvas.drawBitmap(bmp, rect, rect, paint);
//    createBottomShadowPoints(bmp.getWidth(), bmp.getHeight());
//
//    if (mBottomShadowEnabled && !mEnableGradient) {
//      paint.setXfermode(new PorterDuffXfermode(Mode.DARKEN));
//      paint.setColor(Color.BLACK);
//      paint.setAlpha(125);
//      paint.setAntiAlias(true);
//      paint.setStyle(Paint.Style.FILL);
//      canvas.drawPath(mShadowPath, paint);
//    }
//
//    if (mEnableGradient) {
//      Shader shader = new LinearGradient(0, bmp.getHeight() - RADIUS
//          - mBaseHeight, 0, bmp.getHeight(), Color.argb(10, 107, 107, 107),
//          Color.argb(255, 0, 0, 0), TileMode.CLAMP);
//      paint.setXfermode(null);
//      paint.setShader(shader);
//      canvas.drawPath(mShadowPath, paint);
//    }
//
//    if (mCornerMarkEnabled) {
//      switch (markStyle) {
//      case HORIZONTAL:
//        drawHorizontalMark(canvas, bmp);
//        break;
//      case SLOPE:
//        drawSlopeMark(canvas, bmp);
//        break;
//      default:
//
//        break;
//      }
//    }
//    // final RectF bottomRect = new RectF(0, bmp.getHeight() * 13 / 16,
//    // bmp.getWidth(), bmp.getHeight() * 15 / 16);
//    // canvas.drawRect(bottomRect, paint);
//    //
//    // final RectF bottomRoundRect = new RectF(0, bmp.getHeight() * 7 / 8,
//    // bmp.getWidth(), bmp.getHeight());
//    // canvas.drawRoundRect(bottomRoundRect, roundPx, roundPx, paint);
//    return output;
//  }
//
//  private void drawSlopeMark(Canvas canvas, Bitmap bmp) {
//
//  }
//
//  private void drawHorizontalMark(Canvas canvas, Bitmap bmp) {
//
//    int width = bmp.getWidth();
//    int height = bmp.getHeight();
//    markWidth = width / 4;
//    markHeight = height / 5;
//
//  }
// }
